La funzione ritorna NON la lunghezza dell'array (m), bensì la lunghezza del primo elemento dell'array B[0]->size() (che è 1, quindi il for loop esce dopo la prima iterazione).
Questo è a causa del zucchero semantico del C++, dove B e B[0] corrispondono allo stesso elemento in termini di puntatore (base + 0 offset = base).
La soluzione è quella di usare vector<std::string> per contenere l'array di stringhe, oppure ritornare m dalla funzione output, oppure spostare il codice del for loop all'interno della funzione "output" e usare m invece di B->size().
Codice sorgente - presumibilmente C# |
string* output(string strA[], int size) { int cont = 0; int c = 0; int m; for (int i = 0; i<size; i++) { if (strA[i].length() >= 5) { cont++; c += strA[i].length(); } } m = c / cont; string *B = new string[m ]; string word; cout << "Array di stringhe in output:" << endl; for (int i = 0; i<m; i++) { for (int j = 0; j <= (m*i); j++) { word += '*'; } B[i] = word; cout << B[i] << endl; } return B; }
|
Ultima modifica effettuata da pierotofy il 16/06/2015 alle 0:07